/**
 * 
 */
package co.com.sed.model.peers;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;


import co.com.sed.model.beans.IncidentesCriticos;
import co.com.sed.model.beans.ResultadoEVCSubcomp;
import co.com.sed.model.util.Util;

/**
 * @author derain gamez brito
 *
 */
public class IncidentesCriticosPeer {
	
	private static final String BUSCAR_TODOS_INCIDETESCRITICOS =
			"SELECT id_incid_criticos, positivo, mejora, negativo, resultado_EVC_subcomp, periodo, observacion"+
			"FROM Incidentes_Criticos ";
	
	private static final String BUSCAR_INCIDETECRITICO =
			"SELECT id_incid_criticos, positivo, mejora, negativo, resultado_EVC_subcomp, periodo, observacion"+
			"FROM Incidentes_Criticos "+
			"WHERE id_incid_criticos = &id_incid_criticos";
	
	private static final String INSERTAR_INCIDETECRITICO=
			"INSERT INTO Incidentes_Criticos( positivo, mejora, negativo, resultado_EVC_subcomp, periodo, observacion) VALUES "+
			"(&positivo, &mejora, &negativo, &resultado_EVC_subcomp, '&periodo', '&observacion')";
	
	private static final String ACTUALIZAR_INCIDETECRITICO =
			"UPDATE Incidentes_Criticos "+
			"SET positivo = &positivo, mejora = &mejora, negativo = &negativo, resultado_EVC_subcomp = &resultado_EVC_subcomp," +
			"periodo = '&periodo', observacion = '&observacion'"+ 
			"WHERE id_incid_criticos = &id_incid_criticos";
	
	private static final String ELIMINAR_INCIDETECRITICO =
			"DELETE FROM Incidentes_Criticos "+
			"WHERE id_incid_criticos = &id_incid_criticos";
	
		/**
		 *  busca en la base de datos todos los registros de la tabla "incidentesCriticos"
		 * 
		 * @param stmt			referencia al Statement, pasado por DataManager para realizar la consulta
		 * 
		 * @return				lista de incidentes criticos
		 * @see         		Cargo, Statement
		 */
	
	public static ArrayList<IncidentesCriticos> buscarIncidentesCriticos(Statement stmt, int idIncidentesCriticos) {
		ArrayList<IncidentesCriticos> IncidentesCriticos = new ArrayList<IncidentesCriticos>();
	
		String sql = BUSCAR_TODOS_INCIDETESCRITICOS;
	
		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				while (rs.next()) {
					IncidentesCriticos inc = new IncidentesCriticos();
					
					inc.setIdIncidentesCriticos(rs.getInt("id_incid_criticos"));
					inc.setPositivos(rs.getInt("positivo"));
					inc.setMejoras(rs.getInt("mejora"));
					inc.setNegativos(rs.getInt("negativo"));
					inc.setPeriodo(rs.getString("periodo"));
					inc.setObservacion(rs.getString("observacion"));
					inc.setResultadoEVCSubcomp(new ResultadoEVCSubcomp (rs.getInt("id_resul_EVC_subcomp")));
										
					IncidentesCriticos.add(inc);
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:"
					+ e.getMessage());
			e.printStackTrace();
		}
	
		return IncidentesCriticos;
	}
	
	
		/**
		 *  busca en la base de datos un registro de la tabla "incidentesCriticos"
		 * 
		 * @param stmt					referencia al Statement, pasado por DataManager para realizar la consulta
		 * @param incidentesCriticos	id de la incidentesCriticos que se desea cosultar
		 * 
		 * @return						incidenteCritico buscado
		 * @see         				incidenteCritico, Statement
		 */
	
	public static IncidentesCriticos buscarIncidenteCritico(Statement stmt, int idIncidentesCriticos) {
		IncidentesCriticos inc = new IncidentesCriticos();
	
		String sql = BUSCAR_INCIDETECRITICO;
		
		// se setean los "parametros"
		sql = sql.replaceAll("&id_incid_criticos", "" + idIncidentesCriticos);
		
		ResultSet rs;
		try {
			rs = stmt.executeQuery(sql);
			try {
				if (rs.next()) {
					inc.setIdIncidentesCriticos(rs.getInt("id_incid_criticos"));
					inc.setPositivos(rs.getInt("positivo"));
					inc.setMejoras(rs.getInt("mejora"));
					inc.setNegativos(rs.getInt("negativo"));
					inc.setPeriodo(rs.getString("periodo"));
					inc.setObservacion(rs.getString("observacion"));
					inc.setResultadoEVCSubcomp(new ResultadoEVCSubcomp (rs.getInt("id_resul_EVC_subcomp")));					
					
				}
			} finally {
				rs.close();
			}
		} catch (SQLException e) {
			Util.print("No es posible consultar la base de datos:" + e.getMessage());
			e.printStackTrace();
		}
	
		return inc;
	}
	
	
		/**
		 *  Inserta un Tipo de incidentesCriticos en la base de datos
		 * 
		 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
		 * @param incidentesCriticos		incidentesCriticos que se va a insertar en la base de datos
		 * 
		 * @return					void
		 * @throws SQLException		si ocurre un error al insertar el registro en la base de datos
		 * 
		 * @see         			DataManager
		 */
	
	public static int insertarIncidentesCriticos(Statement stmt, IncidentesCriticos incidentesCriticos) throws SQLException {
		int idNuevaIncidentesCriticos = -1;
		ResultSet rs = null;
		
		try {
			String sql = INSERTAR_INCIDETECRITICO;
			 //se setean los "parametros": &id_calificacion, &cualitativa, &cuantitativa, &descripcion 
			sql = sql.replaceAll("&positivo", ""+incidentesCriticos.getPositivos())
					 .replaceAll("&mejora", ""+incidentesCriticos.getMejoras())
					 .replaceAll("&negativo", ""+incidentesCriticos.getNegativos())
					 .replaceAll("&periodo", ""+incidentesCriticos.getPeriodo())
					 .replaceAll("&observacion", ""+incidentesCriticos.getObservacion())
					 .replaceAll("&resultado_EVC_subcomp",  ""+incidentesCriticos.getResultadoEVCSubcomp());
			
			stmt.executeUpdate(sql,Statement.RETURN_GENERATED_KEYS);
			
			rs = stmt.getGeneratedKeys();
			if (rs.next()) {
				idNuevaIncidentesCriticos = rs.getInt("id_incid_criticos");
				Util.print("nuevo registro: " + idNuevaIncidentesCriticos);
			}
		} finally {
			rs.close();
		}
		
		return idNuevaIncidentesCriticos;
	}

		
	
		/**
		 *  Actualiza un Cargo en la base de datos
		 * 
		 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
		 * @param incidentesCriticos		incidentesCriticos que se va a actualizar en la base de datos
		 * 
		 * @return					void
		 * @throws SQLException		si ocurre un error al actualizar el registro en la base de datos
		 * 
		 * @see         			DataManager
		 */
	
	public static void actualizarIncidentesCriticos(Statement stmt, IncidentesCriticos incidentesCriticos) throws SQLException {
		String sql = ACTUALIZAR_INCIDETECRITICO;
		// se setean los "parametros": &id_incid_criticos, &positivo, &mejora, &negativo, &resultado_EVC_subcomp, &periodo, '&observacion'
			sql = sql.replaceAll("&id_incid_criticos", ""+ incidentesCriticos.getIdIncidentesCriticos())
					 .replaceAll("&positivo", ""+incidentesCriticos.getPositivos())
					 .replaceAll("&mejora", ""+incidentesCriticos.getMejoras())
					 .replaceAll("&negativo", ""+incidentesCriticos.getNegativos())
					 .replaceAll("&periodo", ""+incidentesCriticos.getPeriodo())
					 .replaceAll("&observacion", ""+incidentesCriticos.getObservacion())
					 .replaceAll("&resultado_EVC_subcomp",  ""+incidentesCriticos.getResultadoEVCSubcomp());
		
		stmt.executeUpdate(sql);
	}
	
		/**
		 *  Elimina un Cargo en la base de datos
		 * 
		 * @param stmt				referencia al Statement, pasado por DataManager para ejecutar la sentencia
		 * @param incidentesCriticos		incidentesCriticos que se va a eliminar en la base de datos
		 * 
		 * @return					void
		 * @throws SQLException		si ocurre un error al eliminar el registro en la base de datos
		 * 
		 * @see         			DataManager
		 */
	
	public static void eliminarIncidentesCriticos(Statement stmt, IncidentesCriticos incidentesCriticos) throws SQLException {
		String sql = ELIMINAR_INCIDETECRITICO;
		// se setean los "parametros": &id_evaluacion_360
		sql = sql.replaceAll("&id_incid_criticos", "" + incidentesCriticos.getResultadoEVCSubcomp());
	
		stmt.executeUpdate(sql);
	}
	

}
